package main

import "fmt"

func main() {
	//3.打印菱形
	/*
		*
	   ***
	  *****
	 *******
	*********
	 *******
	  *****
	   ***
	    *
	n阶实心菱形，从三方面去考虑，一是菱形分为上下两部分去考虑，一部分为一个大for循环来实现，
	二是每一部分又分为每一行去考虑，每一次循环实现菱形的一行，三是每一行中，空格是一部分，
	星星是一部分，分别用for循环来实现。其中上半部分，空格既与阶数有关也与行数有关，
	星星只与行数有关，下半部分，空格只与行数有关，星星既与阶数有关也与行数有关

	*/
	for i := 1; i <= 10; i++ { //输出10个空行
		for k := 1; k <= 10-i; k++ { //
			fmt.Print(" ")
		}

		/*
		输出10行星星 用i的数字变化控制星星数量一般要打印出1 3 5 7 9 11那就需要i*2-1
		变化为
		i=1的时候1*2-1=1
		i=2的时候2*2-1=3
		i=3的时候3*2-1=5
		*/
		for j := 1; j <= i*2-1; j++ {
			fmt.Print("*")
		}
		fmt.Println()
	}
	for i := 9; i >= 1; i-- { //下面的星星应该是倒着排列，所以需要9行，比上面少一行即可

		for k := 1; k <= 10-i; k++ {
			fmt.Print(" ")
		}
		/*
		接着输出下面的星星，下面的星星应该从17 15 13 11 9 7 5 3 1这样排列，因为上面的i是从9开始的，那么
		我们就应该先从输出17个，那么应该用9*2-1=17，8*2-1=15,7*2-1=13以此类推，一直到1
		就可以输入上面对应数字的星星了，然后到上面用一个for循环来输出空格
		空格应该是第一行前面放1个空格，第2行2个，第3行3个。。。第9行9个，因为每输出空格后都要换行，所以，
		条件表达式2就需要k<=1;k<=2;k<=3;k<=4;k<=5.....k<=9,因为i开始是9，我们就可以用公式10-i
		每一次循环i都会-1，就是10-9=1,10-8=2,10-7=3,得到的就是要输出的空格数量。
		*/
		for j := 1; j <= i*2-1; j++ {
			fmt.Print("*")
		}
		fmt.Println()
	}

}
